package namegen

import (
	"fmt"
	"math/rand"
	"strings"
	"time"
)

// Chars 字母数字字符集
const Chars = "abcdefghijklmnopqrstuvwxyz0123456789"

// Digits 数字字符集
const Digits = "0123456789"

// Date 以 YYYYMMDD 格式返回当前日期
func Date() string {
	return time.Now().Format("20060102")
}

// Time 以 YYYYMMDDHHMMSS 格式返回当前时间
func Time() string {
	return time.Now().Format("20060102150405")
}

// Rand 生成指定长度的字符串
func Rand(length int, charset string) string {
	now := time.Now().UnixNano()
	rng := rand.New(rand.NewSource(now))
	size := len(charset)
	var result strings.Builder
	for i := 0; i < length; i++ {
		char := charset[rng.Intn(size)]
		result.WriteByte(char)
	}
	return result.String()
}

// Short 生成 5 位随机字符串
func Short() string {
	return Rand(5, Chars)
}

// Code 生成 6 位随机数字
func Code() string {
	return Rand(6, Digits)
}

// TimeShort 返回当前时间戳和 5 位随机字符串
func TimeShort() string {
	return fmt.Sprintf("%s_%s", Time(), Short())
}
